約 4,235,253 件
https://w.atwiki.jp/chrome_os/pages/20.html
2009/09/30MicrosoftのBallmerインタビューPart2―OSビジネスでは良いOSを一つ作って、どこまでもそれを育てていくのが正しいやり方だ <中国OSS>Google Chromeはどこへ向かうのか 2009/09/28[CG]タブレット戦争がやってきた グーグル、IE用プラグイン「Chrome Frame」に対するマイクロソフトの批判に大反撃 2009/09/25第1回 OSS利用でコスト削減,利便性向上 バイドゥCEOのLi氏、中国での成長戦略を語る--新たなUIも開発中 2009/09/24Google,IEをChrome化するプラグイン「Google Chrome Frame」をリリース 2009/09/23<中国OSS>国家の150万台の龍芯PC購入計画が判明 2009/09/20グーグル、「HTML 5」への積極的参加でマイクロソフトを賞賛 2009/09/17グーグル 次の一手-「今、ミッションの更新を考えている」 2009/09/16グーグル、「Chrome 3」の安定版をリリース Google、Webブラウザ「Chrome 3」安定版を提供開始 2009/09/14グーグル 次の一手-始めにブラウザありき 2009/09/05<中国OSS>ソニープレインストール契約に見るブラウザ戦争 2009/09/03またまた出ましたChrome OSのスクリーンショット, 今度のはアイコンがでっかい 2009/09/02ニュース解説 Windows7発売、Google「Chrome(クローム)」の勝算は?
https://w.atwiki.jp/timeattack/pages/468.html
【GBA】 ミスタードリラー2 このタイトルは4つの記録方法があります。 リザルト画面にゲーム内タイムが表示されます。 ゲーム内タイムも参考記録として記載するのもおk!(※あくまで順位はストップウォッチ基準) 初級クリア 難易度選択から、最下層に着地するまで 順位 タイム ゲーム内 日付 配信者名 キャラ その他一言 No.1 中級クリア 難易度選択から、最下層に着地するまで 順位 タイム ゲーム内 日付 配信者名 キャラ その他一言 No.1 上級クリア 難易度選択から、最下層に着地するまで 順位 タイム ゲーム内 日付 配信者名 キャラ その他一言 No.1 00 00 00 00"00 2009/00/00 全クリ 初級選択から、上級最下層に着地するまで 順序は初級→中級→上級 順位 タイム ゲーム内 日付 配信者名 キャラ その他一言 No.1 00 00 00 00"00 2009/00/00
https://w.atwiki.jp/mygamecollection/pages/98.html
開催期間:2011年4月18日11:00~4月25日1 00まで イベントの簡単なルール等はイベントについてをご覧下さい。 イベント参加でレシピ(ミックスジュース)GET!! イベント参加でGET★ 必要SPとご褒美レシピ 必要SPとご褒美(上記7カテゴリ達成後) グループでチャレンジ イベント参加でGET★ ミックスジュース 必要SPとご褒美レシピ 対象カテゴリ 必要RP 画像 レシピ名 カフェ 50 生フルーツゼリー ファーストフード 700 3色デコジェラート 中華料理 2000 冷やし中華 アジア料理 3000 ベトナム風生春巻き イタリア料理 5000 トマトと海老の冷製パスタ 韓国料理 7000 韓国式トトリ冷麺 和食 10000 三輪素麺 必要SPとご褒美(上記7カテゴリ達成後) 対象料理 イベント参加で貰えるレシピ()と7カテゴリ達成で貰えるレシピ必要SP数はトータルSPです。 必要SP 画像 レシピ名 13000 佐藤錦(レシピ) 29000 マジカルクロック20時間 48000 金魚の壁紙 69000 ボービア(レシピ) 90000 杜若と睡蓮(景色) 111000 アオザイ(ユニフォーム) 132000 ざるうどん(レシピ) 172000 野菜のゼリー寄せ(レシピ) グループでチャレンジ グループ全員のRP合計でご褒美! (前回結果に応じてRPが決定) 必要SP 画像 レシピ名 前回のポイントによる マジカルクロック20時間 トロピカルジュース
https://w.atwiki.jp/keisks/
technote @keiskS 技術系の備忘録 Notesです。 (メモ目的なので、真偽や動作、最新情報を保証するものではありません。) 検索 Profile 記事一覧はこちらから tag_cloud python mac latex nlp linux vim java git ML visualization cpp numpy stats math ENV NLP javascript windows matplotlib bash webdesign IDE intellij homebrew eclipse regex lubuntu AWS algorithm matlab mturk ssh lifehack presentation vimperator english vagrant maven keyboard pdf clojure jQuery linguistics docker gcp make jupyter xcode C# moses pip env sed firefox BigData tikz scala DeepLearning Psycholinguistics excel NAIST css R octave seaborn pgfplots setup jekyll neuroscience opennlp ImageMagick ipython gpgpu github GCP lucene normalization chrome gcloud bootstrap scrapy crawling tree json tqdm infra solr kubernetes unix boost ubuntu web script dynet tika mt pylearn MT wifi spark tmux SGE OpenFst ml scikit-learn perl twitter joshua mecab markdown psycholinguistics PDF Word English byobu Dropbox LaTeX hdf5 html torch csv gcc awk rsync pyyhon chainer crawl tex lua SVM STL nltk pypy pandas NN mysql cython theano pydot すべてのエントリー こちらから RSS RSS-link 最近のエントリー 取得中です。
https://w.atwiki.jp/naiwa/pages/59.html
http //d.hatena.ne.jp/tonocchi/ ないわー
https://w.atwiki.jp/thecockrockshockpop/pages/285.html
http //www.myspace.com/heartthrobmob member Lonny Lovett vocal Bobby Vanden guitar Mark Hayes bass Traci Michaels drums ex-member Dev Estate bass Eat Your Heart Out ( 2006 ) Hit List ( 2006 ) Eat Your Heart Out ( 1995 ) Hit List ( 1993 ) Eat Your Heart Out ( 2006 ) 2006年 1. Eat Your Heart Out / 2. Credit Card Junky / 3. Liar / 4. Good Luck Girl / 5. P.U.S.S.Y. / 6. One Shot / 7. Doctor / 8. Radio Song / 9. Get Away / 10. Deja-Vu / 11. Sick Ta Death / 12. Only When You re On Top / 13. Roller Coaster [ un-released demos ] / 14. Music Factory [ un-released demos ] produced by Lonny Lovett Hit List ( 2006 ) 2006年 1. Psycho / 2. Attitude / 3. Rumor / 4. Chance / 5. You / 6. Senior Prom You Bitch / 7. Freaked Out / 8. Johnny s Got A Girlfriend / 9. Groupie Girl / 10. Good Times / 11. Angel / 12. Be My Valentine [ un-released demos ] / 13. Don t Break My Hreat [ un-released demos ] produced by HEART THROB MOB Eat Your Heart Out ( 1995 ) 1995年 1. Eat Your Heart Out / 2. Credit Card Junky / 3. Liar / 4. Good Luck Girl / 5. P.U.S.S.Y. / 6. One Shot / 7. Doctor / 8. Radio Song / 9. Get Away / 10. Deja-Vu / 11. Sick Ta Death / 12. Only When You re On Top produced by Lonny Lovett Hit List ( 1993 ) 1993年 1. Psycho / 2. Attitude / 3. Rumor / 4. Chance / 5. You / 6. Senior Prom You Bitch / 7. Freaked Out / 8. Johnny s Got A Girlfriend / 9. Groupie Girl / 10. Good Times / 11. Angel produced by HEART THROB MOB
https://w.atwiki.jp/toho/pages/6109.html
Cafe de Touhou 2 サークル:DDBY Number Track Name Arranger Original Works Original Tune Length 01 Seaside Bizen 東方星蓮船 幽霊客船の時空を越えた旅 [03 04] 02 unknown.your smile ぴーえー 東方星蓮船 平安のエイリアン [04 58] 03 濡れた素肌に ししまい3号 東方星蓮船 魔界地方都市エソテリア [03 45] 04 かんぱんバカンス 鯛の小骨 東方星蓮船 スカイルーイン [04 01] 05 Romance for you ひろさわけんぢ 東方星蓮船 夜空のユーフォーロマンス [03 58] 06 Skyscraper of Horizon OdiakeS 東方星蓮船 感情の摩天楼 ~ Cosmic Mind [04 40] 07 Prime Star KA=YA 東方星蓮船 万年置き傘にご注意を [04 16] 08 流星階段 Bizen 東方星蓮船 キャプテン・ムラサ [03 33] 09 SEAMOON NOAH 東方星蓮船 春の湊に [04 08] 10 Old under the sun Takayan 東方星蓮船 青空の影 [03 59] 11 Blue Wings F 東方星蓮船 空の帰り道 ~ Sky Dream [04 23] 詳細 コミックマーケット80(2011/08/13)にて頒布 イベント価格:1,000円 ショップ価格:1,470円(税込) Arranger Bizen: (DDBY) ぴーえー: (ROUGH TIME) ししまい3号: (ししまいブラザーズ) 鯛の小骨: (Azure & Sands) ひろさわけんぢ: (monochrome scope) OdiakeS: (SJV-SC) KA=YA: (Aitherium) NOAH Takayan: (Wist) F レビュー 名前 コメント
https://w.atwiki.jp/nicorap_lyric/pages/575.html
どうもイルボンです。 戯言 要害堅固 自己紹介(ver.ILL-BOMB) 境界 豪快奔放 That`s Right!! モンハン2ndG体験記 猛省 協奏学論 new waveマイクリレー ニコラッパーズチャンプル ふぁっきんバレンタイン 24 Bars To Kill feat. 一人歩き. 雨天決行. イルボン. OROCHI. Killer 伸びるのびるぞおおおおおお 異次元マイクリレー 言魂奔走 あの場所へ パンダヒーロー RAP.ver【イルボン】 自己嫌悪マイクリレー お花見マイクリレー2011 採点不可 IJKL包囲網 How Gee PlayStation MR バイビーベイビーサヨウナラ RAP.ver【イルボン】 basic stance【MC十六夜、餅乃上姫菜子、イルボン】 GAMEOVER ぼっちマイクリレー ブルータスマイクリレー ニコニコ動画タグマイクリレー 残念です REMIX【ろくろくるー 関西組編】 Super Family Computer MR RAPSTAR REMIX 殺陣 -It s show time- What s Generation REMIX dddawn!!【イルボン&とりさん ver.】 千本桜 RAP.ver(ver.y t r,イルボン) 千本桜RAP.Ver に 全力で乗っかった【ytrとイルボンとタラバ】 monochrome landscape ↑人生ゲーム↓ RAP.ver【イルボン】 GBAMR Just a game RAP.ver Only I Can Judge God エンヴィキャットウォーク RAP.ver【イルボン】 クリスマスなんかいらない Mr.MusicをRAPアレンジしてみた 能く在る輪廻と猫の噺 マトリョシカ RAP.ver【イルボン】 NICONICO DISCO Ver.イルボン PROP RAP.ver【イルボン】 PONPONPON 炉心融解-全農連P Remix- RAP.ver【イルボン】
https://w.atwiki.jp/toho_karaoke/pages/107.html
当ページ編集 投票期間終了曲共通編集 JOYSOUNDのリアルタイムリクエストで、投票期間内に入曲が決定しなかった東方アレンジ楽曲です。 リアルタイムリクエストの投票受付は2015年10月1日に終了しました。→JOYSOUND掲載ページ(2015/08/06発表) 当wiki内関連ページ 投票期間終了曲サークル目次あ か さ た な は ま や ら わ JOYSOUND内関連ページ JOYSOUNDに楽曲を追加するには? 投票期間終了曲サークル目次 あアールグレイ あ~るの~と IRON ATTACK! 暁Records AGGRESSIVE BEAT CIRCLE AdamKadmon AniPix/Syrufit 暴LADY あぷえぬすたーと! Amateras Records あらいぐまファクトリー efs EastNewSound イオシス Innocent Key Imprison Equity EdelSounds A-One L-ZONE(翠工房) OTAKU-ELITE Recordings かColor Color+ カラスヤサボウ Kraster Croak Not Rue CLOCKWORKS TRACER GET IN THE RING ごりら公園 さSound Online SOUND HOLIC Saga Novel Satellite Himawari サリー Sun Flower Field ジャク じゃねっと亭 松樹千年翠 少女理論観測所 森羅万象 SWING HOLIC 清風明月 た鶫 都築きせの 凋叶棕 天然ジェミニ は発熱巫女~ず はにーぽけっと Further Ahead Of Warp Foreground Eclipse ふぉれすとぴれお Frozen System Records FRONTIER CREATE Vaguedge dies for dies irae へたのよこずき ま舞風(MAIKAZE) MISTYRAIN モジャン棒 monochrome-coat やユウノウミ 幽閉サテライト らRiverside Re Volte ロザリオ†インペール ※論理について。
https://w.atwiki.jp/fxext/pages/46.html
ブックマーク編集パネルにあるPlaceフォルダ選択リストメニュー/ツリービューが使いたかったので。 editBookmarkOverlay.xul と editBookmarkOverlay.js と editBookmarkOverlay.css のコピーみたいな感じに…。editBookmarkOverlay.dtd はコピーせずそのまま使うことにした。 jsコードは editBookmarkOverlay.js を読み込んで gEditItemOverlay のメソッドのいくつかを改造/置き換えた方が早くて楽なんだけど、中の動きを理解するためにあえて必要な部分をまるまるコピーしながら勉強。2箇所ほどバグを発見した…。 ファイル構成 ブラウザにダイアログを開くメニューを追加chrome.manifest browser.xul browser.js ダイアログを作成dialog.xul dialog.js PlaceFolderPicker.xul PlaceFolderPicker.js PlaceFolderPicker.css 機能としては、メニューからダイアログを開いて、placeフォルダを選択して、okで終わるとprefs.js設定にフォルダidを保存するだけ。 ファイル構成 *.xpi ├ install.rdf ├ chrome.manifest └ content ├ browser.xul ├ browser.js └ PlaceFolderPicker ├ dialog.xul ├ dialog.js ├ PlaceFolderPicker.xul ├ PlaceFolderPicker.js └ PlaceFolderPicker.css PlaceFolderPicker.css は本当は skin フォルダに入れるべきなんだけど、面倒なので xul や js と同じフォルダに入れてる。 ブラウザにダイアログを開くメニューを追加 chrome.manifest パッケージ名はとりあえず安直に test で。 content test content/ overlay chrome //browser/content/browser.xul chrome //test/content/browser.xul browser.xul ツールメニュー内にメニュー追加 script src="browser.js"/ menupopup id="menu_ToolsPopup" menuitem id="test_open_dialog" label="PlaceFolderPicker ダイアログを開く" oncommand="testBrowser.openDialog();"/ /menupopup browser.js var testBrowser = { openDialog function() { let features = "centerscreen,chrome,modal,resizable=yes"; window.openDialog( chrome //test/content/PlaceFolderPicker/dialog.xul , testDialog , features); }, }; ダイアログを作成 dialog.xul PlaceFolderPicker.xul を overlay で読み込む。 ?xml version="1.0"? ?xml-stylesheet href="chrome //global/skin/"? ?xul-overlay href="chrome //test/content/PlaceFolderPicker/PlaceFolderPicker.xul"? dialog id="testDialog" title="PlaceFolderPicker テスト ダイアログ" xmlns="http //www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onload="testDialog.init();" onunload="testDialog.uninit();" style="min-width 30em;" buttons="accept,cancel" ondialogaccept="return testDialog.ok();" ondialogcancel="return testDialog.cancel();" script src="dialog.js"/ grid id="PlaceFolderPickerContent"/ /dialog dialog.js var testDialog = { init function() { var id; try { id = Services.prefs.getIntPref("extensions.test.folderid"); } catch(e) {} PlaceFolderPicker.init(id); }, uninit function() { PlaceFolderPicker.uninit(); }, ok function() { Services.prefs.setIntPref("extensions.test.folderid", PlaceFolderPicker.id); PlaceFolderPicker.save(); return true; }, cancel function() { return true; }, }; PlaceFolderPicker.xul dialog.xulをoverlayする。 editBookmarkOverlay.xul からかなりコピーしてる。 ?xml version="1.0"? ?xml-stylesheet href="chrome //browser/skin/places/places.css"? ?xml-stylesheet href="chrome //browser/content/places/places.css"? ?xul-overlay href="chrome //browser/content/places/placesOverlay.xul"? ?xml-stylesheet href="PlaceFolderPicker.css"? !DOCTYPE overlay [ !ENTITY % editBookmarkOverlayDTD SYSTEM "chrome //browser/locale/places/editBookmarkOverlay.dtd" %editBookmarkOverlayDTD; ] overlay id="PlaceFolderPicker" xmlns="http //www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" script src="PlaceFolderPicker.js"/ !-- browser/omni.ja/chrome/browser/content/browser/places/editBookmarkOverlay.xul -- grid id="PlaceFolderPickerContent" flex="1" columns column/ column flex="1"/ /columns rows row id="PFP_folderRow" align="center" label value=" editBookmarkOverlay.folder.label;" control="PFP_folderMenuList"/ hbox flex="1" menulist id="PFP_folderMenuList" flex="1" class="folder-icon" oncommand="PlaceFolderPicker.onFolderMenuListCommand(event);" menupopup menuitem id="PFP_toolbarFolderItem" class="menuitem-iconic folder-icon"/ menuitem id="PFP_bmRootItem" class="menuitem-iconic folder-icon"/ menuitem id="PFP_unfiledRootItem" class="menuitem-iconic folder-icon"/ menuseparator id="PFP_chooseFolderSeparator"/ menuitem id="PFP_chooseFolderMenuItem" label= editBookmarkOverlay.choose.label; class="menuitem-iconic folder-icon"/ menuseparator id="PFP_foldersSeparator"/ /menupopup /menulist button id="PFP_foldersExpander" class="expander-down" tooltiptext=" editBookmarkOverlay.foldersExpanderDown.tooltip;" tooltiptextdown=" editBookmarkOverlay.foldersExpanderDown.tooltip;" tooltiptextup=" editBookmarkOverlay.expanderUp.tooltip;" oncommand="PlaceFolderPicker.toggleFolderTreeVisibility();"/ /hbox /row row id="PFP_folderTreeRow" collapsed="true" flex="1" spacer/ vbox flex="1" tree id="PFP_folderTree" flex="1" class="placesTree" type="places" height="150" minheight="150" editable="true" hidecolumnpicker="true" onselect="PlaceFolderPicker.onFolderTreeSelect();" treecols treecol anonid="title" flex="1" primary="true" hideheader="true"/ /treecols treechildren flex="1"/ /tree hbox button id="PFP_newFolderButton" label=" editBookmarkOverlay.newFolderButton.label;" accesskey=" editBookmarkOverlay.newFolderButton.accesskey;" oncommand="PlaceFolderPicker.newFolder();"/ /hbox /vbox /row /rows /grid /overlay PlaceFolderPicker.js editBookmarkOverlay.js からコピーしまくり // browser/omni.ja/chrome/browser/content/browser/places/editBookmarkOverlay.js // Cu.import("resource //gre/modules/PlacesUtils.jsm"); // Cu.import("resource ///modules/PlacesUIUtils.jsm"); // Cu.import("resource //gre/modules/debug.js"); // 最近使用したフォルダのアノテーションマーク。↓はブックマーク編集パネルのと同じ。 // 共有したくなければ独自のを設定すればいい。 const LAST_USED_ANNO = "bookmarkPropertiesDialog/folderLastUsed"; // 最近使用したフォルダの表示数 const MAX_FOLDER_ITEM_IN_MENU_LIST = 5; var PlaceFolderPicker = { init function PFP_init(id) { this.id = id; try { if (id === undefined) throw new Error( id が指定されていません。 ); if (id == PlacesUtils.placesRootId) throw new Error( Placesルートフォルダは指定出来ません。 ); if (id == PlacesUtils.tagsFolderId) throw new Error( タグフォルダは指定出来ません。 ); let bms = PlacesUtils.bookmarks; let type = bms.getItemType(this.id); if (type != bms.TYPE_FOLDER) throw new Error( 指定の id はフォルダではありません。id + this.id + /type + type); //bms.getFolderReadonlyはfirefox36で削除された模様 //if (bms.getFolderReadonly(this.id)) // throw new Error( フォルダが読み込み専用です。id + this.id); } catch(e) { console.error(e); this.id = PlacesUtils.bookmarksMenuFolderId; // デフォルトのフォルダ } this._folderMenuList = this._element("folderMenuList"); this._folderTree = this._element("folderTree"); this._initFolderMenuList(); // observe changes PlacesUtils.bookmarks.addObserver(this, false); }, uninit function PFP_uninit(save) { PlacesUtils.bookmarks.removeObserver(this); }, save function() { // 現在のフォルダを最近使用したフォルダとしてマークアップ(特殊フォルダは除く) if (this.id != PlacesUtils.unfiledBookmarksFolderId this.id != PlacesUtils.toolbarFolderId this.id != PlacesUtils.bookmarksMenuFolderId) this._markFolderAsRecentlyUsed(this.id); }, _element function(id) { return window.document.getElementById("PFP_" + id); }, _initFolderMenuList function PFP__initFolderMenuList() { const bms = PlacesUtils.bookmarks; const annos = PlacesUtils.annotations; // 初期リストの設定 { let unfiledItem = this._element("unfiledRootItem"); unfiledItem.label = bms.getItemTitle(PlacesUtils.unfiledBookmarksFolderId); unfiledItem.folderId = PlacesUtils.unfiledBookmarksFolderId; let bmMenuItem = this._element("bmRootItem"); bmMenuItem.label = bms.getItemTitle(PlacesUtils.bookmarksMenuFolderId); bmMenuItem.folderId = PlacesUtils.bookmarksMenuFolderId; let toolbarItem = this._element("toolbarFolderItem"); toolbarItem.label = bms.getItemTitle(PlacesUtils.toolbarFolderId); toolbarItem.folderId = PlacesUtils.toolbarFolderId; } // 最近使用したフォルダのリストを取得 var folderIds = annos.getItemsWithAnnotation(LAST_USED_ANNO); // リストをソート this._recentFolders = []; for (let i = 0; i folderIds.length; i++) { let lastUsed = annos.getItemAnnotation(folderIds[i], LAST_USED_ANNO); this._recentFolders.push({ folderId folderIds[i], lastUsed lastUsed }); } this._recentFolders.sort(function(a, b) { if (b.lastUsed a.lastUsed) return -1; if (b.lastUsed a.lastUsed) return 1; return 0; }); // 既定の数だけメニューに追加 var numberOfItems = Math.min(MAX_FOLDER_ITEM_IN_MENU_LIST, this._recentFolders.length); for (let i = 0; i numberOfItems; i++) { this._appendFolderItemToMenupopup(this._recentFolders[i].folderId); } // 現在のフォルダをデフォルト選択 var defaultItem = this._getFolderMenuItem(this.id); this._folderMenuList.selectedItem = defaultItem; // 特殊フォルダアイコン表示のため、menulist要素に独自属性を設定する this._folderMenuList.setAttribute("selectedId", defaultItem.id ); }, _appendFolderItemToMenupopup function PFP__appendFolderItemToMenuList(aFolderId) { var folderMenuItem = window.document.createElement("menuitem"); var folderTitle = PlacesUtils.bookmarks.getItemTitle(aFolderId) folderMenuItem.folderId = aFolderId; folderMenuItem.setAttribute("label", folderTitle); folderMenuItem.className = "menuitem-iconic folder-icon append"; this._folderMenuList.menupopup.appendChild(folderMenuItem); return folderMenuItem; }, _getFolderMenuItem function PFP__getFolderMenuItem(aFolderId) { var menupopup = this._folderMenuList.menupopup; for (let i = 0; i menupopup.childNodes.length; i++) { if ("folderId" in menupopup.childNodes[i] menupopup.childNodes[i].folderId == aFolderId) return menupopup.childNodes[i]; } // 最近使用したフォルダが規定の数かそれ以上の場合、1個削除 var appendMenu = menupopup.getElementsByClassName("append"); if (appendMenu.length = MAX_FOLDER_ITEM_IN_MENU_LIST) menupopup.removeChild(menupopup.lastChild); return this._appendFolderItemToMenupopup(aFolderId); }, onFolderMenuListCommand function PFP_onFolderMenuListCommand(aEvent) { if (aEvent.target.id == "PFP_chooseFolderMenuItem") { // リストメニューの選択状態を元に戻し、ツリーを表示する let item = this._getFolderMenuItem(this.id); this._folderMenuList.selectedItem = item; setTimeout(function(self) self.toggleFolderTreeVisibility(), 100, this); return; } // 現在のフォルダidを更新する this.id = this._getFolderIdFromMenuList(); // 特殊フォルダアイコン表示のためのmenulist要素の独自属性を更新する this._folderMenuList.setAttribute("selectedId", this._folderMenuList.selectedItem.id ); // フォルダツリーを更新する var folderTreeRow = this._element("folderTreeRow"); if (!folderTreeRow.collapsed) { var selectedNode = this._folderTree.selectedNode; if (!selectedNode || PlacesUtils.getConcreteItemId(selectedNode) != this.id) this._folderTree.selectItems([this.id]); } }, _getFolderIdFromMenuList function PFP__getFolderIdFromMenuList() { var selectedItem = this._folderMenuList.selectedItem; NS_ASSERT("folderId" in selectedItem, "Invalid menuitem in the folders-menulist"); return selectedItem.folderId; }, toggleFolderTreeVisibility function PFP_toggleFolderTreeVisibility() { var expander = this._element("foldersExpander"); var folderTreeRow = this._element("folderTreeRow"); if (!folderTreeRow.collapsed) { expander.className = "expander-down"; expander.setAttribute("tooltiptext", expander.getAttribute("tooltiptextdown")); folderTreeRow.collapsed = true; this._element("chooseFolderSeparator").hidden = this._element("chooseFolderMenuItem").hidden = false; } else { expander.className = "expander-up" expander.setAttribute("tooltiptext", expander.getAttribute("tooltiptextup")); folderTreeRow.collapsed = false; const FOLDER_TREE_PLACE_URI = "place excludeItems=1 excludeQueries=1 excludeReadOnlyFolders=1 folder=" + PlacesUIUtils.allBookmarksFolderId; this._folderTree.place = FOLDER_TREE_PLACE_URI; this._element("chooseFolderSeparator").hidden = this._element("chooseFolderMenuItem").hidden = true; this._folderTree.selectItems([this.id]); this._folderTree.focus(); } window.sizeToContent(); }, onFolderTreeSelect function PFP_onFolderTreeSelect() { var selectedNode = this._folderTree.selectedNode; // Disable the "New Folder" button if we cannot create a new folder this._element("newFolderButton") .disabled = !this._folderTree.insertionPoint || !selectedNode; if (!selectedNode) return; var folderId = PlacesUtils.getConcreteItemId(selectedNode); if (this.id == folderId) return; var folderItem = this._getFolderMenuItem(folderId); this._folderMenuList.selectedItem = folderItem; folderItem.doCommand(); }, _markFolderAsRecentlyUsed function PFP__markFolderAsRecentlyUsed(aFolderId) { var txns = []; // Expire old unused recent folders var anno = this._getLastUsedAnnotationObject(false); while (this._recentFolders.length MAX_FOLDER_ITEM_IN_MENU_LIST) { var folderId = this._recentFolders.pop().folderId; let annoTxn = new PlacesSetItemAnnotationTransaction(folderId, anno); txns.push(annoTxn); } // Mark folder as recently used anno = this._getLastUsedAnnotationObject(true); let annoTxn = new PlacesSetItemAnnotationTransaction(aFolderId, anno); txns.push(annoTxn); let aggregate = new PlacesAggregatedTransaction("Update last used folders", txns); PlacesUtils.transactionManager.doTransaction(aggregate); }, /** * Returns an object which could then be used to set/unset the * LAST_USED_ANNO annotation for a folder. * * @param aLastUsed * Whether to set or unset the LAST_USED_ANNO annotation. * @returns an object representing the annotation which could then be used * with the transaction manager. */ _getLastUsedAnnotationObject function PFP__getLastUsedAnnotationObject(aLastUsed) { return { name LAST_USED_ANNO, type Ci.nsIAnnotationService.TYPE_INT32, flags 0, value aLastUsed ? new Date().getTime() null, expires Ci.nsIAnnotationService.EXPIRE_NEVER, }; }, newFolder function PFP_newFolder() { var ip = this._folderTree.insertionPoint; // default to the bookmarks menu folder if (!ip || ip.itemId == PlacesUIUtils.allBookmarksFolderId) { ip = new InsertionPoint(PlacesUtils.bookmarksMenuFolderId, PlacesUtils.bookmarks.DEFAULT_INDEX, Ci.nsITreeView.DROP_ON); } // XXXmano add a separate "New Folder" string at some point... var defaultLabel = this._element("newFolderButton").label; var txn = new PlacesCreateFolderTransaction(defaultLabel, ip.itemId, ip.index); PlacesUtils.transactionManager.doTransaction(txn); this._folderTree.focus(); this._folderTree.selectItems([ip.itemId]); PlacesUtils.asContainer(this._folderTree.selectedNode).containerOpen = true; this._folderTree.selectItems([this._lastNewItem]); this._folderTree.startEditing(this._folderTree.view.selection.currentIndex, this._folderTree.columns.getFirstColumn()); }, // nsINavBookmarkObserver onItemChanged function PFP_onItemChanged(aItemId, aProperty, aIsAnnotationProperty, aValue, aLastModified, aItemType) { if (aProperty == "title" aItemType == PlacesUtils.bookmarks.TYPE_FOLDER) { // If the title of a folder which is listed within the folders // menulist has been changed, we need to update the label of its // representing element. var menupopup = this._folderMenuList.menupopup; for (let i = 0; i menupopup.childNodes.length; i++) { if ("folderId" in menupopup.childNodes[i] menupopup.childNodes[i].folderId == aItemId) { menupopup.childNodes[i].label = aValue; break; } } } return; }, onItemAdded function PFP_onItemAdded(aItemId) { this._lastNewItem = aItemId; }, onItemMoved function() { }, onItemRemoved function() { }, onBeginUpdateBatch function() { }, onEndUpdateBatch function() { }, onItemVisited function() { }, }; PlaceFolderPicker.css /* browser/omni.ja/chrome/browser/skin/classic/browser/places/editBookmarkOverlay.css */ /**** folder menulist ****/ .folder-icon .menulist-label-box .menulist-icon { width 16px; height 16px; } .folder-icon .menu-iconic-left { display -moz-box; } .folder-icon { list-style-image url("chrome //global/skin/icons/folder-item.png") !important; -moz-image-region rect(0px, 32px, 16px, 16px) !important; } /**** expanders ****/ .expander-up, .expander-down { min-width 0; margin 0; -moz-margin-end 4px; } .expander-up .button-box, .expander-down .button-box { padding 0; } .expander-up { list-style-image url("chrome //global/skin/icons/collapse.png"); } .expander-down { list-style-image url("chrome //global/skin/icons/expand.png"); } #PFP_folderTree { margin-top 2px; margin-bottom 2px; } /* editBookmarkOverlay.js で javascript で処理していた セパレーターの非表示処理はCSSで可能 */ #PFP_foldersSeparator last-child { display none; } /* dropdown icons */ #PFP_folderMenuList[selectedId="PFP_toolbarFolderItem"], #PFP_toolbarFolderItem { list-style-image url("chrome //browser/skin/places/bookmarksToolbar.png") !important; -moz-image-region auto !important; } #PFP_folderMenuList[selectedId="PFP_bmRootItem"], #PFP_bmRootItem { list-style-image url("chrome //browser/skin/places/bookmarksMenu.png") !important; -moz-image-region auto !important; } #PFP_folderMenuList[selectedId="PFP_unfiledRootItem"], #PFP_unfiledRootItem { list-style-image url("chrome //browser/skin/places/unsortedBookmarks.png") !important; -moz-image-region auto !important; }